using System.Collections;
using System.Xml;
using Altova.TypeInfo;
using Altova.Xml;
using Altova.Xml.Meta;
using RDML_v1_2_REC.xs;

namespace RDML_v1_2_REC.rdml
{
	public class dataType : TypeBase
	{
		internal class Enumerator : EnumeratorBase
		{
			public override object Current
			{
				get
				{
					return new dataType((XmlNode)base.InnerCurrent);
				}
			}

			public Enumerator(IEnumerator inner)
				: base(inner)
			{
			}
		}

		public class MemberElement_tar : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public idReferencesType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public idReferencesType First
			{
				get
				{
					return new idReferencesType(owner.GetElementFirst(info));
				}
			}

			public idReferencesType Last
			{
				get
				{
					return new idReferencesType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_tar(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public idReferencesType At(int index)
			{
				return new idReferencesType(owner.GetElementAt(info, index));
			}

			public idReferencesType Append()
			{
				return new idReferencesType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new idReferencesType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_cq : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public floatType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public floatType First
			{
				get
				{
					return new floatType(owner.GetElementFirst(info));
				}
			}

			public floatType Last
			{
				get
				{
					return new floatType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_cq(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public floatType At(int index)
			{
				return new floatType(owner.GetElementAt(info, index));
			}

			public floatType Append()
			{
				return new floatType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new floatType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_excl : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public stringType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public stringType First
			{
				get
				{
					return new stringType(owner.GetElementFirst(info));
				}
			}

			public stringType Last
			{
				get
				{
					return new stringType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_excl(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public stringType At(int index)
			{
				return new stringType(owner.GetElementAt(info, index));
			}

			public stringType Append()
			{
				return new stringType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new stringType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_adp : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public dpAmpCurveType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public dpAmpCurveType First
			{
				get
				{
					return new dpAmpCurveType(owner.GetElementFirst(info));
				}
			}

			public dpAmpCurveType Last
			{
				get
				{
					return new dpAmpCurveType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_adp(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public dpAmpCurveType At(int index)
			{
				return new dpAmpCurveType(owner.GetElementAt(info, index));
			}

			public dpAmpCurveType Append()
			{
				return new dpAmpCurveType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new dpAmpCurveType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_mdp : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public dpMeltingCurveType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public dpMeltingCurveType First
			{
				get
				{
					return new dpMeltingCurveType(owner.GetElementFirst(info));
				}
			}

			public dpMeltingCurveType Last
			{
				get
				{
					return new dpMeltingCurveType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_mdp(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public dpMeltingCurveType At(int index)
			{
				return new dpMeltingCurveType(owner.GetElementAt(info, index));
			}

			public dpMeltingCurveType Append()
			{
				return new dpMeltingCurveType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new dpMeltingCurveType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_endPt : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public floatType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public floatType First
			{
				get
				{
					return new floatType(owner.GetElementFirst(info));
				}
			}

			public floatType Last
			{
				get
				{
					return new floatType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_endPt(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public floatType At(int index)
			{
				return new floatType(owner.GetElementAt(info, index));
			}

			public floatType Append()
			{
				return new floatType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new floatType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_bgFluor : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public floatType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public floatType First
			{
				get
				{
					return new floatType(owner.GetElementFirst(info));
				}
			}

			public floatType Last
			{
				get
				{
					return new floatType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_bgFluor(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public floatType At(int index)
			{
				return new floatType(owner.GetElementAt(info, index));
			}

			public floatType Append()
			{
				return new floatType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new floatType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_bgFluorSlp : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public floatType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public floatType First
			{
				get
				{
					return new floatType(owner.GetElementFirst(info));
				}
			}

			public floatType Last
			{
				get
				{
					return new floatType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_bgFluorSlp(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public floatType At(int index)
			{
				return new floatType(owner.GetElementAt(info, index));
			}

			public floatType Append()
			{
				return new floatType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new floatType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_quantFluor : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public floatType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public floatType First
			{
				get
				{
					return new floatType(owner.GetElementFirst(info));
				}
			}

			public floatType Last
			{
				get
				{
					return new floatType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_quantFluor(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public floatType At(int index)
			{
				return new floatType(owner.GetElementAt(info, index));
			}

			public floatType Append()
			{
				return new floatType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new floatType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public MemberElement_tar tar;

		public MemberElement_cq cq;

		public MemberElement_excl excl;

		public MemberElement_adp adp;

		public MemberElement_mdp mdp;

		public MemberElement_endPt endPt;

		public MemberElement_bgFluor bgFluor;

		public MemberElement_bgFluorSlp bgFluorSlp;

		public MemberElement_quantFluor quantFluor;

		public static ComplexType StaticInfo
		{
			get
			{
				return new ComplexType(RDML_v1_2_REC_TypeInfo.binder.Types[RDML_v1_2_REC_TypeInfo._altova_ti_rdml_altova_dataType]);
			}
		}

		public dataType(XmlNode init)
			: base(init)
		{
			instantiateMembers();
		}

		private void instantiateMembers()
		{
			tar = new MemberElement_tar(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_dataType_altova_tar]);
			cq = new MemberElement_cq(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_dataType_altova_cq]);
			excl = new MemberElement_excl(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_dataType_altova_excl]);
			adp = new MemberElement_adp(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_dataType_altova_adp]);
			mdp = new MemberElement_mdp(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_dataType_altova_mdp]);
			endPt = new MemberElement_endPt(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_dataType_altova_endPt]);
			bgFluor = new MemberElement_bgFluor(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_dataType_altova_bgFluor]);
			bgFluorSlp = new MemberElement_bgFluorSlp(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_dataType_altova_bgFluorSlp]);
			quantFluor = new MemberElement_quantFluor(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_dataType_altova_quantFluor]);
		}

		public void SetXsiType()
		{
			XmlTreeOperations.SetAttribute(base.Node, "xsi:type", "http://www.w3.org/2001/XMLSchema-instance", new XmlQualifiedName("dataType", "http://www.rdml.org"));
		}
	}
}
